package com.sky.entity;

import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.google.common.reflect.TypeToken;
import com.sky.utils.StringUtils;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import lombok.Data;
import org.springframework.cloud.commons.util.IdUtils;

import java.io.Serializable;
import java.util.HashMap;

@Data
public class MessageRequest implements Serializable {

    /** 当type值为-1的时候，表示对方客户端是一台服务器 **/
    private Integer type;

    /** 当前发送消息的用户id **/
    private Long userId;

    /** 请求token，用来鉴权 **/
    private String token;

    /** 发送的消息 **/
    private String message;

    /** 接收消息的用户id（-1代表发送到服务器的消息） **/
    private Long receiverUserId;

    public static MessageRequest build(String msg) {
        // 解析netty接收到的消息
        java.util.Map<String,String> map = new Gson().fromJson(msg, new TypeToken<HashMap<String, String>>() {}.getType());
        // 封装消息实体
        MessageRequest messageRequest = new MessageRequest();
        String type = map.get("type");
        if (StringUtils.isNotEmpty(type)){
            messageRequest.setType(Integer.valueOf(type));
        }
        String token = map.get("token");
        if (StringUtils.isNotEmpty(token)){
            messageRequest.setToken(token);
        }
        // 鉴权，鉴权不通过应该返回错误信息，并断开连接，删除连接信息
        String message = map.get("message");
        if (StringUtils.isNotEmpty(message)){
            messageRequest.setMessage(message);
        }
        String receiverUserId = map.get("receiverUserId");
        if (StringUtils.isNotEmpty(receiverUserId)){
            messageRequest.setReceiverUserId(Long.valueOf(receiverUserId));
        }
        String userId = map.get("userId");
        if (StringUtils.isEmpty(userId)){
            long userId1 = IdUtil.getSnowflake().nextId();
            System.out.println("当前用户id：" + userId1);
            messageRequest.setUserId(userId1);
        }
        return messageRequest;
    }
}
